package cn.org.xuanguang.kepler.hormos.rdb.dml.warrper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 将结果集包装成 list，行数据以map格式
 *
 * @param <T>
 */
public class MapListWapper<T extends MapListWapper> implements ResultWrapper<Map<String, Object>, List<Map<String, Object>>> {

    private final List<Map<String, Object>> resultList = new ArrayList<>();

    @Override
    public Map<String, Object> newRowInstance() {
        return new HashMap<>();
    }

    /**
     * 对指定列进行包装的函数。
     * 该方法重写了ColumnWrapperContext的wrapColumn方法，旨在针对特定的列数据进行处理或者封装。
     *
     * @param context 包含列信息和相关上下文的ColumnWrapperContext对象，其中Map<String, Object>类型的数据结构
     *                用于存储列的详细信息和相关数据。键值对形式的Map提供了灵活性，可以处理各种类型的列数据。
     *                通过该参数，可以在函数内访问和修改列的相关信息。
     *                <p>
     *                该方法没有返回值，其主要作用是对传入的列上下文进行操作，影响其内部状态或者逻辑处理。
     */
    @Override
    public void wrapColumn(ColumnWrapperContext<Map<String, Object>> context) {
        Map<String, Object> rowInstance = context.getRowInstance();
        rowInstance.put(context.getColumnLabel(), context.getResult());
        resultList.add(rowInstance);
    }

    @Override
    public boolean completedWrapRow(Map<String, Object> result) {
        return true;
    }

    @Override
    public List<Map<String, Object>> getResult() {
        return resultList;
    }
}
